<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script>
        // 对象  对象是人们要进行研究的任何事物
        // 是一系列相关属性和方法的集合
        // 属性 通过变量来表示，对象的相关特征，静态的
        // 方法 通过函数来实现，对象的相关行为，动态的
        // 是一种数据类型
        // 声明对象
        var dog = {
            name: 'lili',
            weight: 60,
            jump: function(){
                // this指代调用该函数的对象
                console.log(this); //指代自己 在对象方法内部使用，指代当前对象
                console.log('jump');
            }
        }  //写死的一个值  
        // 使用一对大括号表示对象，属性和方法写在括号内
        // 属性包括属性名和属性值，之间使用冒号分隔
        // 属性和属性之间使用逗号分隔
        // 方法同属性类似，只是值部分为一个函数体

        // this 关键字
        // 在对象方法内部使用，指代当前对象
        dog.jump();   //{name:"lili",weight:60,jump: f}  jump
        console.log(this);   // 结果打印window 默认是window调用

        function fn(){
            console.log(this)  // 相当于是widow.fn 是widow调用的 所以this指window
        }
        // window.fn();
        fn();  // 结果打印window

        var dogs = [
            {
                name: 'lili',
                weigth: 60,
                jump: function(){
                    console.log('jump');
                }
            },
            {
                name: '2',
                weigth: 60,
                jump: function(){
                    console.log('jump');
                }
            },
            {
                name: '3',
                weigth: 60,
                jump: function(){
                    console.log('jump');
                }
            },
            {
                name: '4',
                weigth: 60,
                jump: function(){
                    console.log('jump');
                }
            },
            {
                name: '5',
                weigth: 60,
                jump: function(){
                    console.log('jump');
                }
            },
        ] 
       
        // 增删改查
        // 访问属性
        console.log(dog.name);
        console.log(dog['name']); //如果不是变量,两个等价
    
        // 访问对象属性和方法
        //  方式一 :  通过 对象名.属性名 、对象名.方法名( )
        //  方式二 :  通过 对象名["属性名"]
        var key = 'weight';  //如果是变量
        console.log(dog.key); // 没有key属性 undefined
        console.log(dog[key]); //如果是变量

        var key = 'eight';
        console.log(dog['w'+key]); // 中括号内是个表达式的环境

        // 访问方法
        dog.jump();

        // 添加对象属性;
        // 对象创建之后，要向对象添加属性，只需要为新属性赋值即可
        dog.breed = 'hsq';  // 不存在,新增属性
        // 修改对象属性
        // 直接为原有属性赋新值即可
        dog.weight = 80;   // 存在,修改属性
        // 删除对象属性
        delete dog.jump;   // 删除属性
        console.log(dog);
        
        //遍历对象属性 for in 语句
        for( var key in dog ){
            console.log(key,dog[key]);
            if(typeof dog[key] != 'function'){
                document.write(key+'--'+dog[key]+'</br>');  //不显示函数
            }
        }
        // key 变量，在循环中代表一个属性键        
        // 通过 objName[ key ] 访问到相应的属性值


        for(var i=0;i<dogs.length;i++){
            for( var key in dogs[i] ){
                console.log(key,dogs[i][key]);
                if(typeof dogs[i][key] != 'function'){
                    document.write(key+'--'+dogs[i][key]+'</br>');  //不显示函数
                }
            } 
        }
        
        for (var i in dogs) {
            for( var key in dogs[i] ){
                console.log(key,dogs[i][key]);
                if(typeof dogs[i][key] != 'function'){
                    document.write(key+'--'+dogs[i][key]+'</br>');  //不显示函数
                }
            } 
        }
        
        

    </script>
</body>
</html>